/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hoja4;

/**
 *
 * @param <E> 
 * @author Nery Giron, Adrian Martinez, Maria Fernanda Martinez, Darwin Rivas
 */
public interface Stack <E> {
    
    /**
     * Nombre: push
     * Descripcion: agrega un objeto a la pila
     * Pre: espacio disponible
     * Post: item agregado a la pila
     * @param item de tipo E
     * Valor de retorno: ninguno
     */
    public void push(E item);
    
    /**
     * Nombre: pop
     * Descripcion: el objeto que entro de ultimo a la pila es retirado de ella
     * Pre: hay item en la pila
     * Post: item removido de la pila
     * Parametros: ninguno
     * @return valor tipo E
     */
    public E pop();
    
    /**
     * Nombre: peek
     * Descripcion: muestra el ultimo valor que ingreso a la pila
     * Pre: hay item en la pila
     * Post: muestra item
     * Parametros: ninguno
     * @return valor tipo E
     */
    public E peek();
    
    /**
     * Nombre: empty
     * Descripcion: verifica si la pila esta vacia
     * Pre: ninguno
     * Post: regresa true si la pila esta vacia
     * Parametros: ninguno
     * @return valor tipo boolean
     */
    public boolean empty();
    
    /**
     * Nombre: size
     * Descripcion: obtiene la cantidad de elementos presentes en la pila
     * Pre: ninguno
     * Post: regresa la cantidad de elementos en la pila
     * Parametros: ninguno
     * @return valor tipo int
     */
    public int size();
    
    //-----------------------------------------------------------------------------------------------------
    /**
     * Nombre: operate
     * Descripcion: realiza la operacion con dos numeros basado en el operador ingresado
     * Pre: existen dos valores numericos y un operador
     * Post: resultado de la operacion
     * @param a de tipo float
     * @param b de tipo float
     * @param op de tipo String
     * @return valor tipo float
     */
    public float operate(float a, float b, String op);
    
    /**
     * Basado en el ejemplo de http://lineadecodigo.com/java/validar-si-un-dato-es-numerico-en-java/
     * Nombre: isNumeric
     * Descripcion: verifica si los caracteres representan un valor numérico
     * Pre: existe una cadena de caracteres
     * Post: regresa true si es un número
     * @param cadena de tipo String
     * @return valor tipo boolean
     */
    public boolean isNumeric(String cadena);
        
    /**
     * Nombre: isSymbol
     * Descripcion: verifica que el caracter representa un operador
     * Pre: existe una cadena con un caracter
     * Post: regresa true si es alguno de los operadores
     * @param cadena de tipo String
     * @return  valor tipo boolean
     */
    public boolean isSymbol(String cadena);
    
    /**
     * Nombre: clear
     * Descripcion: saca todos los elementos de la pila
     * Pre: ninguno
     * Post: pila vacia
     * Parametros: ninguno
     * Valor de retorno: ninguno
     */
    public void clear(); 
}
